Sidekiq スケジュールジョブ、そして Redis ZSET Scores
Sidekiqのスケジュールジョブは schedule というkeyに入ってる Q. いつハケるのかわからない
A. ZRANGEBYSCORE schedule -inf +inf WITHCSORES
scheduled job はソート済みセット型を使用しています。 n時間後に実行の場合、以下のようにtimeオブジェクトを浮動小数点数への変換を行い、変換した値をソート済みセット型のスコアとして使用しています。
Redis sorted sets use a double 64-bit floating point number to represent the score. In all the architectures we support, this is represented as an IEEE 754 floating point number
Q. スコア?
A. Redis zset データ型にあるスコアのこと。予約日時をスコアとしている。
ZRANGE で確認する場合はスコア降順なので予約日時に若い順番に並んでいる(Sidekiq Console でもそうだし、Sidekiq::ScheduledSet.new.each {|job| puts job} でも日時昇順になる)